package middleware

import (
	"asuOfficialApi/comm"
	"asuOfficialApi/model"
	"asuOfficialApi/service"
	"github.com/kataras/iris"
	"strings"
)

func New(s service.TokenService) iris.Handler {
	return func(ctx iris.Context) {
		uri := ctx.Request().RequestURI
		index := strings.Index(uri, "/anno/")

		if index != -1 {
			ctx.Next()
			return
		}

		token := ctx.URLParamTrim("token")
		if token != "" {
			entity := s.GetToken(token)
			if entity == nil {
				_, _ = ctx.JSON(comm.Fail(comm.ErrorNotExist, "token不存在"))
			} else if entity.Status != model.TokenStatusValid {
				_, _ = ctx.JSON(comm.Fail(comm.ErrorNotExist, "token失效"))
			} else {
				ctx.Values().Set("user_id", entity.UserId)
				ctx.Values().Set("user_type", entity.UserType)
				ctx.Next()
			}
		} else {
			_, _ = ctx.JSON(comm.Fail(comm.ErrorTokenNotSet, "token没有设置"))
		}
	}
}
